//
// Created by Asus on 2025/6/1.
//

#include <iostream>
#include <string>
using namespace std;

class Person {
public:
    string m_Name;
    int m_Age;

    Person(string name, int age) {
        m_Name = name;
        m_Age = age;
    }
};

template<class T>
bool myCompare(T &a, T &b) {
    if (a == b) {
        return true;
    } else {
        return false;
    }
}

//具体化，显示具体化的原型和定意思以template<>开头，并通过名称来指出类型
//具体化优先于常规模板
template<>
bool myCompare(Person &a, Person &b) {
    if (a.m_Age == b.m_Age && a.m_Name == b.m_Name) {
        return true;
    } else {
        return false;
    }
}

void demo01() {
    int a = 10;
    int b = 20;
    //内置数据类型可以直接使用通用的函数模板
    bool ret = myCompare(a, b);
    if (ret) {
        cout << "a == b " << endl;
    } else {
        cout << "a != b " << endl;
    }

    Person p1("Tom", 10);
    Person p2("Tom", 10);
    //自定义数据类型，不会调用普通的函数模板
    //可以创建具体化的Person数据类型的模板，用于特殊处理这个类型
    ret = myCompare(p1, p2);
    if (ret) {
        cout << "p1 == p2 " << endl;
    } else {
        cout << "p1 != p2 " << endl;
    }
}

int main(int argc, char *argv[]) {
    demo01();
    return 0;
}
